package com.sun.jdk.stream;

import com.sun.jdk.lambda.domain.Person;

import java.util.stream.Stream;

/**
 * Stream接口的常用方法
 */
public class StreamTest17MapReduce {
    public static void main(String[] args) {

       // reduce方法常和map方法一起使用
        
        // 求这些人的年龄总和
        Integer ageSum = Stream.of(
                new Person("张三", 14),
                new Person("张三", 17),
                new Person("李四", 13),
                new Person("王五", 13),
                new Person("赵六", 15)
        ).map(Person::getAge).reduce(0, Integer::sum);

        System.out.println("所有人的年龄总和："+ageSum);
        System.out.println("----------");
        
        // 求出所有年龄中的最大值
        Integer MaxAge = Stream.of(
                        new Person("张三", 14),
                        new Person("张三", 17),
                        new Person("李四", 13),
                        new Person("王五", 13),
                        new Person("赵六", 15)
                ).map(person -> person.getAge())
                .reduce(0, (p1, p2) -> Math.max(p1, p2));
        System.out.println("年龄中的最大值："+MaxAge);

        // 求出所有年龄中的最大值(简化写法，使用方法引用的形式)
        Integer MaxAge1 = Stream.of(
                        new Person("张三", 14),
                        new Person("张三", 17),
                        new Person("李四", 13),
                        new Person("王五", 13),
                        new Person("赵六", 15)
                ).map(Person::getAge)
                .reduce(0, Math::max);
        System.out.println("年龄中的最大值："+MaxAge1);
        
        // 统计字符串a出现的次数
        Integer count = Stream.of("a", "b", "a", "c", "d").map(ch -> "a".equals(ch) ? 1 : 0)
                .reduce(0, (x, y) -> {
                    return x + y;
                });
        System.out.println("a出现的次数："+count);

    }
}
